package cn.com.wxd.biz.user;

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import cn.com.wxd.entity.user.AccountInfo;
import cn.com.wxd.entity.user.UsersInfo;

/**
 * Title:用户信息业务处理类
 * Description:用户信息业务处理类
 * <p>
 * Company: Amumu管理平台
 * Copyright: Copyright (c) 2015
 * All right reserved.
 * Created time: 2015年10月22日 下午2:39:46
 *
 * @author WangXuDong
 * @version 1.0
 */
public interface UsersService {
    /**
     * 登录方法，返回false说明登录失败，否则成功
     * request request
     * passWord 为使用base64加密密码
     */
    boolean login(HttpServletRequest request, String userName, String passWord);

    /**
     * 使用用户名查询用户是否存在,以及此账号是否被绑定
     *
     * @return 是否存在
     *
     * @userName 用户名
     */
    boolean queryUserB(String userName);

    /**
     * 更新登录信息
     *
     * @return
     */
    boolean updateLoginInfo(String userName, String ip);

    /**
     * 查询用户账号信息，根据用户Id
     *
     * @param userId
     *
     * @return
     */
    List<AccountInfo> queryAccountByUserId(long userId);

    /**
     * 根据一些条件查询UsersInfo
     * @param param
     * @return
     */
    List<UsersInfo> queryUsersInfos(HashMap<String,String> param);

    /**
     * 根据一些条件查询AccountInfo
     * @param param
     * @return
     */
    List<AccountInfo> queryAccountInfos(HashMap<String,String> param);

    /**
     * 添加一个用户，用户信息的密码为使用base64加密的密码
     */
    boolean addUser(AccountInfo accountInfo);

    /**
     * 更新一条用户基本信息
     *
     * @param userName 用户名
     * @param param    字段名称，value值
     *
     * @return 是否成功
     */
    boolean updateBaseUserInfo(String userName, HashMap<String, Object> param);

    /**
     * 查询账户根据用户名
     *
     * @param userName
     *
     * @return
     */
    AccountInfo queryAccount(String userName);

    /**
     * 更新密码
     *
     * @param userName 用户名
     * @param password 使用Base64加密的密码
     *
     * @return 是否成功
     */
    boolean updatePassword(String userName, String password);

    /**
     * 更新用户角色权限
     * @param userId 用户id
     * @param roles 角色字符串
     * @return
     */
    boolean updateRoles(long userId, String roles);

    /**
     * 根据最后登录的时间从前往后获取相应多的账号数据
     *
     * @param maxCount 最大数
     *
     * @return 账户列表
     */
    List<AccountInfo> queryAllAccountListOrderCTime(int maxCount);

    /**
     * 获取用户数量
     *
     * @return
     */
    int getUserCount();

    /**
     * 用户登录权限授权
     *
     * @param userName 用户名， isForbidden 是否禁用此账号 true禁用，false 启动
     *
     * @return 是否成功
     */
    boolean userLoginAuthority(String userName, boolean isForbidden);

    /**
     * 绑定用户安全信息phone手机，email邮箱
     *
     * @param userName 用户名
     * @param type     类型，phone手机，email邮箱
     * @param secInfo  安全信息 如手机，邮箱
     *
     * @return 是否成功
     */
    boolean bindingUserSecurityInfo(String userName, String type, String secInfo);

    /**
     * 解绑用户安全信息phone手机，email邮箱
     *
     * @param userName   用户名
     * @param type       类型，phone手机，email邮箱
     * @param secInfoStr 安全信息 如手机，邮箱
     *
     * @return 是否成功
     */
    boolean unwrapUserSecurityInfo(String userName, String type, String secInfoStr);

}
